perm filename MCP.AX[258,JMC] blob
sn#097406 filedate 1974-04-16 generic text, type T, neo UTF8
DECLARE INDVAR e ε EXPRESSION;
DECLARE PREDCONST isconst(EXPRESSION);
DECLARE PREDCONST isvar(EXPRESSION);
DECLARE PREDCONST issum(EXPRESSION);
DECLARE OPCONST s1(EXPRESSION)=EXPRESSION;
DECLARE OPCONST s2(EXPRESSION)=EXPRESSION;
DECLARE PREDPAR pred 1;
AXIOM expsyn:
∀ e.(isconst(e)∨isvar(e)∨issum(e)),
∀ e.(isconst(e) ∨ isvar(e) ∨ (issum(e)∧ pred(s1(e))∧pred(s2(e)))
⊃ pred(e)) ⊃ ∀ e.(pred(e));
;
DECLARE INDVAR xi ε SOURCESTATE;
DECLARE OPCONST value(EXPRESSION,SOURCESTATE) = NUMBER;
DECLARE OPCONST val(EXPRESSION) = NUMBER;
DECLARE OPCONST c(EXPRESSION,SOURCESTATE) = NUMBER;
DECLARE OPCONST plus(NUMBER,NUMBER) = NUMBER;
AXIOM expsem:
∀ e xi.(isconst(e) ⊃ value(e,xi) = val(e)),
∀ e xi.(isvar(e) ⊃ value(e,xi) = c(e,xi)),
∀ e xi.(issum(e) ⊃ value(e,xi) = plus(value(s1(e),xi),value(s2(e),xi)))
;;
declare PREDCONST null(PROGRAM);
declare PREDCONST isli(PROGRAM);
declare PREDCONST isload(PROGRAM);
declare PREDCONST isadd(PROGRAM);
declare PREDCONST issto(PROGRAM);
declare OPCONST first(PROGRAM)=PROGRAM;
declare OPCONST rest(PROGRAM)=PROGRAM;
declare OPCONST append(PROGRAM,PROGRAM)=PROGRAM;
declare OPCONST mkli(NUMBER)=PROGRAM;
declare OPCONST mkload(NUMBER)=PROGRAM;
declare OPCONST mkadd(NUMBER)=PROGRAM;
declare OPCONST mksto(NUMBER)=PROGRAM;
declare OPCONST arg(PROGRAM)=NUMBER;
declare INDVAR s ε PROGRAM;
declare INDVAR t ε PROGRAM;
declare INDVAR n n1 n2 n3 ε NUMBER;
axiom progsyn:
∀s.(¬null(s) ⊃ isli(first(s))∨isload(first(s))∨isadd(first(s))
∨issto(first(s))),
∀s t.(null(s) ⊃ append(s,t) = t),
∀s t.(¬null(s) ⊃ first(append(s,t)) = first(s)),
∀s t.(¬null(s) ⊃ rest(append(s,t)) = append(rest(s),t));;
axiom li:
∀ n.(isli(mkli(n))),
∀ n.(n = arg(mkli(n))),
∀ n.(null(rest(mkli(n)))),
∀ s.(isli(s) ⊃ first(s) = s);
;
axiom load:
∀n.isload(mkload(n)),
∀n.(n=arg(mkload(n))),
∀n.(null(rest(mkload(n)))),
∀s.(isload(s)⊃first(s)=s);;
axiom sto:
∀n.issto(mksto(n)),
∀n.(n=arg(mksto(n))),
∀n.(null(rest(mksto(n)))),
∀s.(issto(s)⊃first(s)=s);;
axiom add:
∀n.isadd(mkadd(n)),
∀n.(n=arg(mkadd(n))),
∀n.(null(rest(mkadd(n)))),
∀s.(isadd(s)⊃first(s)=s);;
declare INDVAR x y z x1 y1 z1 x2 y2 z2 ε NUMBER;
declare INDVAR eta eta1 eta2 eta3 ε STATE;
declare OPCONST cc(NUMBER,STATE) =NUMBER;
declare OPCONST a(NUMBER,NUMBER,STATE) = STATE;
axiom assign:
∀x n eta.cc(x,a(x,n,eta))=n,
∀x y n eta.(¬(x=y) ⊃ cc(x,a(y,n,eta)) = cc(x,eta)),
∀x n1 n2 eta.a(x,n1,a(x,n2,eta)) = a(x,n1,eta),
∀x y n1 n2 eta.(¬(x=y) ⊃ a(x,n1,a(y,n2,eta)) = a(y,n2,a(x,n1,eta))),
∀x eta.a(x,cc(x,eta),eta) = eta;;